package web;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.transaction.UserTransaction;

public class HibernateSessionFilter implements Filter
{
	@Override
	public void destroy()
	{

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
	{
		UserTransaction userTransaction = null;
		
		try
		{
			userTransaction = (UserTransaction)new InitialContext().lookup("UserTransaction");
			userTransaction.begin();
			
			chain.doFilter(request, response);
			
			userTransaction.commit();
		}
		catch(Exception ex)
		{
			if(userTransaction != null)
			{
				try
				{
					userTransaction.rollback();
				}
				catch(Exception e)
				{
					throw new ServletException("Não foi possível ROLL BACK", e);
				}
			}
			
			throw new ServletException(ex);
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException
	{

	}

}
